使用 CI/CD 工具通常不會是自己一個人使用,因此設定團隊與認證是非常重要的。
概念上,我們可以把團隊視為一個命名空間,將不同團隊的 Pipeline 和資料分隔出來。而認證的方式則取決於團隊,也就是說不同團隊可以用有不一樣的認證方式。另一方面,團隊中並不存在「使用者」這一概念,對 Concourse 只在意用什麼方式通過驗證而已。
在 Concourse 裡面有一個特例的團隊叫做 main
是唯一擁有權限新增和修改其他團隊的團隊,而且目前沒有辦法將其他團隊提升權限到這個層級,因此是唯一特例的團隊。而主團隊的認證方式,也需要在部署的時候就決定好,無法在部署後調整認證方式。
當你透過 fly
指令登入 main
團隊後,就可以使用 set-team
指令來新增或者修改團隊。
fly set-team -n my-team \
--basic-auth-username ci \
--basic-auth-password changeme
而團隊被新增出來後,我們就能用 fly login -n my-team
來指定要登入的團隊。
在切換團隊後,新設定的 Pipeline 等,都會被這個團隊所有有,除非設定為公開不然其他團隊是無法瀏覽的。
因為在建置的時候我們需要有非常多秘鑰之類的設定,還要確保原始碼不會被不相干的人取得。所以需要進行認證的設定,讓有權限的人可以取得和配置這些資訊。
不過即使設定了認證,如果在公開的網路環境中沒有搭配 SSL 加密連線的話,還是有不安全的。
最簡單的認證方式,使用 HTTP Basic Auth 的機制,只需要設定帳號和密碼。
fly set-team -n my-team \
--basic-auth-username foo \
--basic-auth-password bar
透過 Github 提供的 OAuth 來進行認證,是目前 Concourse 少數支援的第三方認證機制之一。不過要設定的項目也相對的比較多一點。
fly set-team -n concourse \
--github-auth-client-id $CLIENT_ID \
--github-auth-client-secret $CLIENT_SECRET \
--github-auth-team concourse/Pivotal
除了 Client ID 和 Client Secret 之外,所謂的 Auth Team 是指 Github 中在 concourse
組織裡面的 Pivotal
這個團隊有權限存取。
因為使用了 OAuth 認證,所以 Callback 網址也需要在 Github 上面設定,網址位置是 /auth/github/callback
已 Concourse 自己的伺服器來舉例,就是 https://ci.concourse.ci/auth/github/callback
另外,除了指定 Github 團隊外,還有下面幾種授權的方式。
既然能支援 Github 的 OAuth 那麼一般的 OAuth 大多能夠相容,透過設定一樣可以用任何提供 OAuth 2 的服務來當作認證的提供者。
fly set-team -n my-team-in-x \
--generic-oauth-display-name 'X' \
--generic-oauth-client-id $CLIENT_ID \
--generic-oauth-client-secret $CLIENT_SECRET \
--generic-oauth-auth-url https://oauth.example.com/o/oauth2/auth \
--generic-oauth-token-url https://oauth.example.com/o/oauth2/token
表面上看起來相對 Github 多了不少設定,不過其實就是將 OAuth 伺服器提供進來(畢竟 Github 已經是已知的數值可以跳過)
假設需要提供一些額外的參數在認證中使用,可以透過下面兩種方式:
第一種是透過增加網址的參數來實現,而第二種則是賦予 Sceop 數值,可以試 OAuth 2 提供者來調整,像是 Google 就是屬於第二種的類型。
至於 Callback 網址跟 Github 基本上沒有差異,只是從 github
改為 oauth
了!已 Concourse 官方 CI 伺服器的範例舉例,就是 https://ci.concourse.ci/auth/oauth/callback
這個網址。
目前團隊基本上都是有完全的權限操作裡面所有的 Pipeline 不過官方似乎有打算增加更多控制項,但是作為基本的認證已經足夠。
下一篇我們將會正式開始使用 Concourse 來執行一些任務。